package com.huike.utils.file;

import io.minio.*;
import io.minio.errors.MinioException;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;

/**
 * MinIO文件上传工具类
 */
@Slf4j
public class FileUploader {

    private static final String endpoint = "http://localhost:9000"; //minio服务地址
    private static final String accessKey = "minioadmin"; //用户名
    private static final String secretKey = "minioadmin";//密码
    private static final String bucket = "huike";//桶名

    /**
     * 文件上传到minio
     *
     * @param file 上传文件
     * @return 文件的地址
     */
    @SneakyThrows
    public static String upload(MultipartFile file) {

        //1. 创建Minio的客户端
        MinioClient minioClient = MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();

        //2. 如果桶不存在就新建（非必须操作）
        boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());
        if (!found) {
            //创建一个新的桶
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
        }

        //3. 上传文件到桶（流形式）
        minioClient.putObject(
                PutObjectArgs.builder().bucket(bucket)
                        .object(file.getOriginalFilename())//上传到服务器的文件名
                        .stream(file.getInputStream(), file.getSize(), -1)
                        .contentType(file.getContentType())
                        .build()
        );

        //4. 返回文件的地址（三部分组成：http://localhost:9000/huike/1.jpg）
        return endpoint + "/" + bucket + "/" + file.getOriginalFilename();
    }
}